package jmine.tec.datadigester.positional.meta.factory;

import java.beans.PropertyDescriptor;
import java.lang.annotation.Annotation;

import jmine.tec.datadigester.positional.meta.PositionalFieldMetadata;

/**
 * Factory para criação de {@link PositionalFieldMetadata} específicos
 * 
 * @author israel.crisanto
 * @param <T> annotation type
 */
public interface PositionalFieldAnnotationSupport<T extends Annotation> {

    /**
     * Cria o field writer específico para o método e anotação informados
     * 
     * @param property property
     * @param annotation annotation
     * @return o {@link PositionalFieldMetadata} responsável pelo método, devidamente anotado
     */
    PositionalFieldMetadata create(PropertyDescriptor property, T annotation);

    /**
     * Annotation class used for field creation
     * 
     * @return annotation class
     */
    Class<T> annotationClass();
}
